/*
 * @Description: 
 * @Author: changqing
 * @Date: 2021-08-29 20:47:07
 * @LastEditTime: 2021-08-29 21:23:51
 * @LastEditors: changqing
 * @Usage: 
 */


// switchMap内部是一个projectfunction，传入的参数为前一个Observable的事件值，同时必须返回一个Observable。因此可以帮助我们原先来源的事件值转换成另一个Obserable,switchMap收到这个 Observable后会帮我们进行订阅的动作，再把订阅结果当作新的事件值发送， 会退订上一次的Observable。
// 将每个源值投影到一个 Observable 中，该 Observable 合并在输出 Observable 中，仅从最近投影的 Observable 发出值。
// 返回一个 Observable，它基于应用您提供给源 Observable 发射的每个项目的函数来发射项目，其中该函数返回一个（所谓的“内部”）Observable。每次它观察到这些内部 Observable 之一时，输出 Observable 开始发射由该内部 Observable 发射的项目。当一个新的内部 Observable 被发射时，switchMap 停止从早先发射的内部 Observable 发射项目并开始从新的内部 Observable 发射项目。对于后续的内部 Observables，它继续像这样运行。
var { timer, interval } = require('rxjs'); 
var { switchMap } = require('rxjs/operators');

interval(3000).pipe(
  switchMap(() => timer(0, 1000))
).subscribe(data => {
  console.log(data);
});

// 0
// 1
// 2
// 0 (新Observable事件发生，退订上一个 Observable)
// 1
// 2
// ...